home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 23
/
AACD 23.iso
/
AACD
/
Programming
/
tek
/
examples
/
array.c
next >
Wrap
C/C++ Source or Header
|
2001-05-18
|
3KB
|
138 lines
/*
** tek/examples/array.c
**
** demonstrates brute dynamic array resizing.
**
** in this example, we put a dynamic array on top of a reallocatable
** pooled memory manager, with a prefetch ratio of 2:1. this allows
** rapidly fast array resizing - independent from the underlying kernel's
** realloc() efficiency.
*/
#include <stdio.h>
#include <stdlib.h>
#include <tek/exec.h>
#include <tek/array.h>
#define NUM 2000000
#define DYNAMICGROWTH TTRUE
int main(int argc, char **argv)
{
TAPTR task = TCreateTask(TNULL, TNULL, TNULL);
if (task)
{
TMMU mmu;
TAPTR pool = TCreatePool(TNULL, 256, 128, TNULL); /* initial prefetch ratio = chunksize/threshold = 2 */
if (pool)
{
if (TInitMMU(&mmu, pool, TMMUT_Pooled, TNULL))
{
TUINT *array = TCreateArray(&mmu, sizeof(TUINT), 0, TNULL);
if (array)
{
TINT i;
TTIME t1,t2,t3,t4;
TBOOL success = TFALSE;
printf("running %d array growth iterations...\n", NUM); fflush(NULL);
TTimeQuery(task, &t1);
for (i = 0; i < NUM; ++i)
{
if (TArraySetLen((TAPTR) &array, i + 1))
{
array[i] = i;
}
}
TTimeQuery(task, &t2);
printf("done. time elapsed: %.3fs.\n", TTIMETOF(&t2) - TTIMETOF(&t1)); fflush(NULL);
if (TArrayValid(array))
{
TUINT l = TArrayGetLen(array);
printf("array found in valid state. checking integrity...\n"); fflush(NULL);
if (l == NUM)
{
for (i = 0; i < NUM; ++i)
{
if (array[i] != i)
{
printf("ALERT: array corrupt!\n");
break;
}
}
if (i == NUM)
{
printf("all right!\n");
success = TTRUE;
}
}
else
{
printf("array has incorrect size!\n");
}
}
else
{
printf("array found in invalid state!\n");
}
if (success)
{
printf("shrinking array (%d iterations)...\n", NUM); fflush(NULL);
TTimeQuery(task, &t3);
for (i = NUM; i >= 0; --i)
{
TArraySetLen((TAPTR) &array, i);
}
TTimeQuery(task, &t4);
printf("done. time elapsed: %.3fs. checking integrity...\n", TTIMETOF(&t4) - TTIMETOF(&t3)); fflush(NULL);
if (TArrayValid(array) && TArrayGetLen(array) == 0)
{
printf("all right!\n");
}
else
{
printf("array found in invalid state!\n");
}
}
TDestroyArray(array);
}
TDestroy(&mmu);
}
TDestroy(pool);
}
TDestroy(task);
}
return 0;
}